import axios from 'axios'

// 引入vuex.Store实例对象，获取token数据
import store from '../store'

// 使用axios的创建方法，可以达到配置通用数据的功能
const NewAxios = axios.create({
    baseURL: '/apis',
    // 请求接口的请求时间不能超过5s
    timeout: 15000
})

NewAxios.interceptors.request.use(config => {
    let token = store.getters['common/token'],
        otherPath = [
            '/user/validate/code',
            '/user/app/login'
        ]

    // 如果在排除路由之外的 请求地址不用校验是否有token数据
    if (otherPath.includes(config.url)) {
        return config
    } else {
        if (!token) {
            // 错误放回，axios不会发起异步请求
            return Promise.reject({code: 440, message: 'axios拦截错误，丢失了token'})
        } else {
            // 在headers上添加一个token数据，用于后端请求权限校验
            config.headers.token = token
            return config
        }
    }
})


function Ajax(req) {
    if (!req.url) throw Error('请求地址必传')

    return new Promise(resolve => {
       
        NewAxios.request({
            url: req.url, 
            method: req.method || 'GET',
            data: req.data || {},
            params: req.params || {}
        }).then(({data}) => {
            resolve(data)
        }).catch(e => {
            resolve(e)
        })
    })
}

export default Ajax